import axios from "axios"; // 引入axios
import store from "../store/index"; //引入vuex
import router from "../router"; //引入路由
import qs from "qs"; //引入参数编译
import { Message } from 'iview'; //引入消息提示

router.beforeEach((to, from, next) => {
    if (to.meta.requireAuth) {
        // 判断该路由是否需要登录权限
        if (store.state.token) {
            // 通过vuex state获取当前的token是否存在
            next();
        } else {
            next({
                path: "/login",
                query: { redirect: to.fullPath } // 将跳转的路由path作为参数，登录成功后跳转到该路由
            });
        }
    } else {
        next();
    }
});

export default {
    post: function(options, url) {
        return new Promise((resolve, reject) => {
            const instance = axios.create({
                // 具体配置参数参考aixos api
                baseURL: "https://take.hx2lm.com/api/admin/" + url, // url不是绝对地址 如http://www.baidu.coom。会在
                headers: {
                    "Content-Type": "application/x-www-form-urlencoded",
                    "token": localStorage.getItem("data")
                },
                timeout: 30 * 1000 // 30秒超时
            });

            // 添加拦截器
            instance.interceptors.request.use(
                function(config) { //目前这个拦截器是无效的，因为后端没有接受它
                    // 在请求发送到服务器之前 可以对请求的信息做相关处理 入数据格式 权限等等
                    if (store.state.token) {
                        // 判断是否存在token，如果存在的话，则每个http header都加上token
                        config.headers.Authorization = `token ${store.state.token}`;
                    }
                    return config;
                },
                function(err) {
                    return Promise.reject(err);
                }
            );
            instance.interceptors.response.use(
                function(res) {
                    return res;
                },
                function(error) {
                    if (error.response) {
                        switch (error.response.status) {
                            case 401:
                                //401
                                // 返回 401 清除token信息并跳转到登录页面
                                store.commit(types.LOGOUT);
                                router.replace({
                                    path: "/login",
                                    query: { redirect: router.currentRoute.fullPath }
                                });
                                break;
                            case 500:
                                //500
                                //返回500，跳转到500错误页面
                                router.push({
                                    name: "error-500",
                                    query: { redirect: router.currentRoute.fullPath }
                                });
                                break;
                        }
                    }
                    return Promise.reject(error.response.data); // 返回接口返回的错误信息
                }
            );
            // 请求
            instance(
                    Object.assign({}, { method: "POST" }, { data: qs.stringify(options) })
                )
                .then(response => {
                    // then 请求成功之后
                    if (response.data.code == 0) {
                        resolve(response.data);
                    } else if (response.data.code == 1) {
                        Message.warning({
                            content: response.data.message,
                            duration: 3
                        })
                    } else if (response.data.code == 2) {
                        localStorage.removeItem("data");
                        router.replace({
                            path: "/login"
                        });
                    }
                })
                .catch(error => {
                    console.log("请求异常信息：" + error);
                    reject(error);
                });
        });
    },

    get: function(options, url) {
        return new Promise((resolve, reject) => {
            const instance = axios.create({
                // 具体配置参数参考aixos api
                baseURL: "https://take.hx2lm.com/api/admin/" + url, // url不是绝对地址 如http://www.baidu.coom。会在
                headers: {
                    "Content-Type": "application/x-www-form-urlencoded",
                    "token": localStorage.getItem("data")
                },
                method: "GET",
                timeout: 30 * 1000 // 30秒超时
            });

            // 添加拦截器
            instance.interceptors.request.use(
                function(config) { //目前这个拦截器是无效的，因为后端没有接受它
                    // 在请求发送到服务器之前 可以对请求的信息做相关处理 入数据格式 权限等等
                    if (store.state.token) {
                        // 判断是否存在token，如果存在的话，则每个http header都加上token
                        config.headers.Authorization = `token ${store.state.token}`;
                    }
                    return config;
                },
                function(err) {
                    return Promise.reject(err);
                }
            );
            instance.interceptors.response.use(
                function(res) {
                    return res;
                },
                function(error) {
                    if (error.response) {
                        switch (error.response.status) {
                            case 401:
                                //401
                                // 返回 401 清除token信息并跳转到登录页面
                                store.commit(types.LOGOUT);
                                router.replace({
                                    path: "/login",
                                    query: { redirect: router.currentRoute.fullPath }
                                });
                                break;
                            case 500:
                                //500
                                //返回500，跳转到500错误页面
                                router.replace({
                                    name: "error-500",
                                    query: { redirect: router.currentRoute.fullPath }
                                });
                                break;
                        }
                    }
                    return Promise.reject(error.response.data); // 返回接口返回的错误信息
                }
            );
            // 请求
            instance({
                    params: options
                })
                .then(response => {
                    // then 请求成功之后
                    if (response.data.code == 0) {
                        resolve(response.data);
                    } else if (response.data.code == 1) {
                        Message.warning(response.data.message);
                    } else if (response.data.code == 2) {
                        localStorage.removeItem("data");
                        router.replace({
                            path: "/login"
                        });
                    }
                })
                .catch(error => {
                    console.log("请求异常信息：" + error);
                    reject(error);
                });
        });
    }
};